Druid 分布式 SQL 监控使用

Druid 是一个非常强大的数据库连接池,但是它的强大并不仅仅体现在作为一个高性能连接池加快数据访问上和连接管理上,它内置了一个强大的监控工具:Druid Monitor。不仅可以监控数据源和慢查询,还可以监控 Web 应用、URI 监控、Session 监控、Spring 监控等。

访问方式

访问地址:ip:port/druid/sql.html

Druid Monitor 监控界面

什么是 Druid Admin

单实例与集群监控

Druid Monitor 提供强大的监控能力,但目前仅是针对单个服务实例的监控。在微服务架构日益流行的时下,同一个服务可能会有 N 个实例,监控维度需要上升至集群。

官方在 druid 1.2.1 版本后,提供 druid-admin 模块来解决集群监控的问题。

如下图我们可以在原有的监控集群上可以动态的切换服务名称,做到一个监控入口,实现不同服务的监控切换。

Druid Admin 集群监控

Spring Cloud Starter 封装

官方版本问题

目前官方的 druid-admin 正在开发工程中,并不能直接编译运行(依赖包错误、不支持 Java 11 等)。

druid-admin 本身是一个直接可运行的 web 服务,对目前已有服务不太友好,不能做到 spring boot admin 那种即插即用。

PigX 封装

基于上述问题,PigX 对 druid-admin 进行了相关的修改,直接抽取成 spring boot starter 引入即用。

Druid Admin Starter

1. 目标服务暴露 druid 监控端点

spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        allow: ""
        url-pattern: /druid/*
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 10000
          merge-sql: false
  • 页面对外暴露
security:
  oauth2:
    client:
      ignore-urls:
        - druid/**
        - /error
        - /actuator/**
        - /v2/api-docs

2. pigx-monitor 配置需要监控的列表

配置需要监控的服务列表:

monitor:
  applications:
    - pigx-upms-biz
    - pigx-auth

3. 访问 druid-admin 查看集群监控

访问地址:ip:port/druid/sql.html

使用限制

  • 由于 Druid Monitor 的登录校验基于 session 设计,所以在无状态的微服务中不适用。建议直接暴露所有 druid 相关的端点,通过前置网关统一接口权限。

  • 目前实例监控数据是保存在对应内存中,仅在查看时通过每个实例汇总后显示,后期会实现持久化。